﻿//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
// 프로그램 명		: frmSearch.cs
// 프로그램 기능		: 
// 클래스 기능		: 
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자			: 김승현, 조범준
// 개발일			: 2014-08-20
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// F/W 버전		    : Dot NET Compack Framework 4.0 Service Pack 1 Patch
// 라이센스			: Copyright ⓒ 2014-2014 All rights reserved.
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 명명규칙			: 클래스(class) 명				- "c" + 클래스명
//					  전역(private) 상수			- "MC_" + 상수명
//					  공용(public)  상수			- "PC_" + 상수명
//					  전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트
//													- "mv_" + 타입/obj_/hwnd_/stru_/coll_/del_ + 명
//					  공용(public)  변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트
//													- "pv_" + 타입/obj_/hwnd_/stru_/coll_/del_/evnt_ + 명
//					  공용(public)  속성(Property)	- "pp_" + 타입 + 속성명
//					  전역(private) 함수/API		- "mf_" + 함수명/API 함수명
//					  공용(public)  함수/API		- "pf_" + 함수명/API 함수명
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자는 개발/수정시 위의 내용을 반드시 작성하며 내용이 일치하지 않을때에는 모든 사항을 개발자가 책임 진다.
//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
namespace TimsXBX
{
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	/// <summary>frmSearch 클래스</summary>
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	public partial class frmSearch : Form
	{
		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [생성자/소멸자]
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>생성자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public frmSearch(frmMain fMain, string sFormTypeName)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_sFormTypeName = sFormTypeName;
		}
		public frmSearch(frmMain fMain, frmProjects fProjects, string sFormTypeName, string sParentCid, string sParentOid)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_frmProjects = fProjects;
			this.mv_sFormTypeName = sFormTypeName;
			this.mv_sParnetCid = sParentCid;
			this.mv_sParnetOid = sParentOid;
		}
		public frmSearch(frmMain fMain, frmParts fParts, string sFormTypeName, string sParentCid, string sParentOid)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_frmParts = fParts;
			this.mv_sFormTypeName = sFormTypeName;
			this.mv_sParnetCid = sParentCid;
			this.mv_sParnetOid = sParentOid;
		}
		public frmSearch(frmMain fMain, frmParts fParts, string sFormTypeName, string sParentCid, string sParentOid, DataGridView oDataGridView)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_frmParts = fParts;
			this.mv_sFormTypeName = sFormTypeName;
			this.mv_sParnetCid = sParentCid;
			this.mv_sParnetOid = sParentOid;
			this.mv_oDataGridView = oDataGridView;
		}
		//public frmSearch(frmMain fMain)
		//{
		//    InitializeComponent();

		//    this.mv_frmMain = fMain;
		//}
		public frmSearch()
		{
			InitializeComponent();
			mf_Init(this);
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>소멸자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		~frmSearch()
		{
			mf_UnInit(this);
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 상수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "MC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>전역(private) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private const string MC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 상수 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "PC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>공용(public) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public const string PC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mv_타입"/"mv_obj"/"mv_hwnd"/"mv_struc"/"mv_coll"/"mv_del" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>전역(private) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mv_sHello = null;
		//---------------------------------------------------------------------------------------------------
		//메인 폼 객체 핸들
		//---------------------------------------------------------------------------------------------------
		private frmMain mv_frmMain = null;										//메인 폼 인스턴스 핸들
		private frmProjects mv_frmProjects = null;								//PROJECTS 폼 인스턴스 핸들
		private frmParts mv_frmParts = null;									//PARTS 폼 인스턴스 핸들
		private ComCls.cFunction mv_oFunc = null;								//공용함수 인스턴스 핸들
		//---------------------------------------------------------------------------------------------------
		private string mv_sFormTypeName = null;									//폼 종류명(Projects / Parts / Cads / Documents / Workflow)
		private string mv_sSearchSPName = null;									//검색에 실행되는 StoredProcedure
		private string mv_sParnetCid = null;									//Projects/Parts 창에서 호출될때 불러오는 Projects/Parts CID
		private string mv_sParnetOid = null;									//Projects/Parts 창에서 호출될때 불러오는 Projects/Parts OID
		private DataGridView mv_oDataGridView = null;
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pv_타입"/"pv_obj"/"pv_hwnd"/"pv_struc"/"pv_coll"/"pv_del"/"pv_event" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pv_sHello = null;
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 속성(Property:읽기 쓰기 선택적 가능) - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pp_타입" 로 시작
		//         - 영문 대소문자로 시작하고 속성명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 속성(Property) 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pp_bHello
		{
			get { return mv_sHello; }
			set { mv_sHello = value; }
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 함수/API - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>전역(private) 함수 선언 예</summary>
		/// <param name="sStr">전역(private) 함수 인자 선언 예</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_Hello(string sStr)
		{
			try
			{
				sStr = "Hello...";
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sStr;
		}

		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>클래스 초기화</summary>
		/// <param name="objClass">클래스 객체 인스턴스</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_Init(frmSearch objClass)
		{
			try
			{
				//클래스 초기화
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>클래스 마무리</summary>
		/// <param name="objClass">클래스 객체 인스턴스</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_UnInit(frmSearch objClass)
		{
			try
			{
				//클래스 마무리
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Search 창 종류별 초기 설정</summary>
		/// <param name="sFormType">Search 창 종류(Projects, Parts, Cads, Documents, Workflow)</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_InitSearchForm(string sFormType)
		{
			try
			{
				//---------------------------------------------------------------------------------------------------
				// 폼 종류별 초기 설정
				//---------------------------------------------------------------------------------------------------
				if (this.mv_frmProjects == null && this.mv_frmParts == null)
				{
					this.panelRightBottom0.Visible = false;
					this.panelRightBottom1.Visible = false;
					this.panelRightBottom2.Visible = false;
				}
				switch (sFormType)
				{
					//@===================================================================================================
					//Projects Search 기능 개발 현재 제외상태
					//@===================================================================================================
					case "Projects":
						//그리드 초기화
						this.mv_oFunc.pf_DataGridViewInit(this.dgvProjects, 0, true, false);
						//Projects Search TabPage 선택
						this.tabSearch.SelectedIndex = this.tabSearch.TabPages.IndexOfKey("tabSearch_Projects");
						//실행 Procedure명
						this.mv_sSearchSPName = "SP_SEARCH_PROJECTS_R";
						//콤보박스 초기선택
						this.cmbProjects_ProjectsType.SelectedIndex = 0;
						this.cmbProjects_State.SelectedIndex = 0;
						//날짜 체크박스 초기 Disable
						this.dateProjects_CreationDateFrom.Checked = false;
						this.dateProjects_CreationDateTo.Checked = false;
						this.dateProjects_ModificationDateFrom.Checked = false;
						this.dateProjects_ModificationDateTo.Checked = false;
						this.dateProjects_StartDate.Checked = false;
						this.dateProjects_EndDate.Checked = false;
						this.dateProjects_IssuedDate.Checked = false;

						break;
					//---------------------------------------------------------------------------------------------------
					// Parts Search 창 경우
					//---------------------------------------------------------------------------------------------------
					case "Parts":
					case "Projects - Parts":
					case "BOM(Add Exist Parts) - Parts":
					case "BOM(Replace Exist Parts) - Parts":
						//그리드 초기화
						this.mv_oFunc.pf_DataGridViewInit(this.dgvParts, 0, true, false);
						//Parts Search TabPage 선택
						this.tabSearch.SelectedIndex = this.tabSearch.TabPages.IndexOfKey("tabSearch_Parts");
						//부모창에서 받아온 Key(CID/OID)
						this.txtParts_ParentCid.Text = this.mv_sParnetCid;
						this.txtParts_ParentOid.Text = this.mv_sParnetOid;
						//실행 Procedure명
						this.mv_sSearchSPName = "SP_SEARCH_PARTS_R";
						if (this.mv_frmProjects != null)
							this.txtParts_RelSpName.Text = "SP_PROJECTS_RELATEDPARTS_CUD";		//Projects - Related Parts에서 호출된 경우
						if (this.mv_frmParts != null)
							this.txtParts_RelSpName.Text = "SP_PARTS_BOM_CUD";					//Parts - BOM에서 호출된 경우
						//콤보박스 초기선택
						this.cmbParts_State.SelectedIndex = 0;
						this.cmbParts_Latest.SelectedIndex = 0;
						//날짜 체크박스 초기 Disable
						this.dateParts_CreationDateFrom.Checked = false;
						this.dateParts_CreationDateTo.Checked = false;
						this.dateParts_ModificationDateFrom.Checked = false;
						this.dateParts_ModificationDateTo.Checked = false;

						break;
					//---------------------------------------------------------------------------------------------------
					// Cads Search 창 경우
					//---------------------------------------------------------------------------------------------------
					case "Cads":
					case "Projects - Cads":
					case "Parts - Cads":
						//그리드 초기화
						this.mv_oFunc.pf_DataGridViewInit(this.dgvCads, 0, true, false);
						//Cads Search TabPage 선택
						this.tabSearch.SelectedIndex = this.tabSearch.TabPages.IndexOfKey("tabSearch_Cads");
						//부모창에서 받아온 Key(CID/OID)
						this.txtCads_ParentCid.Text = this.mv_sParnetCid;
						this.txtCads_ParentOid.Text = this.mv_sParnetOid;
						//실행 Procedure명
						this.mv_sSearchSPName = "SP_SEARCH_CADS_R";
						if (this.mv_frmProjects != null)
							this.txtCads_RelSpName.Text = "SP_PROJECTS_RELATEDCADS_CUD";		//Projects - Related CADS에서 호출된 경우
						if(this.mv_frmParts != null)
							this.txtCads_RelSpName.Text = "SP_PARTS_RELATEDCADS_CUD";			//Parts - Related CADS에서 호출된 경우
						//콤보박스 초기선택
						this.cmbCads_CadType.SelectedIndex = 0;
						//날짜 체크박스 초기 Disable
						this.dateCads_CreationDateFrom.Checked = false;
						this.dateCads_CreationDateTo.Checked = false;
						this.dateCads_ModificationDateFrom.Checked = false;
						this.dateCads_ModificationDateTo.Checked = false;

						break;
					//@===================================================================================================
					//Documents Search 기능 개발 현재 제외상태
					//@===================================================================================================
					case "Documents":
					case "Projects - Documents":
					case "Parts - Documents":
						//Document Search TabPage 선택
						this.tabSearch.SelectedIndex = this.tabSearch.TabPages.IndexOfKey("tabSearch_Documents");

						break;
					//---------------------------------------------------------------------------------------------------
					// Workflow Search 창 경우
					//---------------------------------------------------------------------------------------------------
					case "Workflow":
						//그리드 초기화
						this.mv_oFunc.pf_DataGridViewInit(this.dgvWorkflow, 0, true, false);
						//ECO Search TabPage 선택
						this.tabSearch.SelectedIndex = this.tabSearch.TabPages.IndexOfKey("tabSearch_Workflow");
						//실행 Procedure명
						this.mv_sSearchSPName = "SP_SEARCH_WORKFLOW_R";
						//날짜 체크박스 초기 Disable
						this.dateWorkflow_CreationDateFrom.Checked = false;
						this.dateWorkflow_CreationDateTo.Checked = false;
						this.dateWorkflow_ModificationDateFrom.Checked = false;
						this.dateWorkflow_ModificationDateTo.Checked = false;

						break;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>폼에 따른 스크롤바 초기화</summary>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_InitVsScrollBar()
		{
			try
			{
				//---------------------------------------------------------------------------------------------------
				// Projects Search 창 경우
				//---------------------------------------------------------------------------------------------------
				if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Projects"))
				{
					if (this.tablePanelProjects.Height > this.vScrollBarProjects.Height)
					{
						this.vScrollBarProjects.Maximum = this.tablePanelProjects.Height - this.vScrollBarProjects.Height + 10;
						this.vScrollBarProjects.Enabled = true;
					}
					else
					{
						this.vScrollBarProjects.Maximum = 0;
						this.vScrollBarProjects.Enabled = false;
					}
				}
				//---------------------------------------------------------------------------------------------------
				// Parts Search 창 경우
				//---------------------------------------------------------------------------------------------------
				if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Parts"))
				{
					if (this.tablePanelParts.Height > this.vScrollBarParts.Height)
					{
						this.vScrollBarParts.Maximum = this.tablePanelParts.Height - this.vScrollBarParts.Height + 10;
						this.vScrollBarParts.Enabled = true;
					}
					else
					{
						this.vScrollBarParts.Maximum = 0;
						this.vScrollBarParts.Enabled = false;
					}
				}
				//---------------------------------------------------------------------------------------------------
				// Cads Search 창 경우
				//---------------------------------------------------------------------------------------------------
				else if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Cads"))
				{
					if (this.tablePanelCads.Height > this.vScrollBarCads.Height)
					{
						this.vScrollBarCads.Maximum = this.tablePanelCads.Height - this.vScrollBarCads.Height + 10;
						this.vScrollBarCads.Enabled = true;
					}
					else
					{
						this.vScrollBarCads.Maximum = 0;
						this.vScrollBarCads.Enabled = false;
					}
				}
				//---------------------------------------------------------------------------------------------------
				// Workflow Search 창 경우
				//---------------------------------------------------------------------------------------------------
				else if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Workflow"))
				{
					if (this.tablePanelWorkflow.Height > this.vScrollBarWorkflow.Height)
					{
						this.vScrollBarWorkflow.Maximum = this.tablePanelWorkflow.Height - this.vScrollBarWorkflow.Height + 10;
						this.vScrollBarWorkflow.Enabled = true;
					}
					else
					{
						this.vScrollBarWorkflow.Maximum = 0;
						this.vScrollBarWorkflow.Enabled = false;
					}
				}
				//---------------------------------------------------------------------------------------------------
				// 어느거도 아닐 경우 ---> Tab Page 선택이 안된 경우로 오류!!!
				//---------------------------------------------------------------------------------------------------
				else
				{
					return;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>폼 사이즈 변경에 따른 스크롤바 상태변경(위치를 맨위로 올리기 / 스크롤바 Enable 상태변경..)</summary>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_ChangeVsScrollBarStatus()
		{
			try
			{
				//---------------------------------------------------------------------------------------------------
				//Projects 검색 폼 사이즈 변경 시
				//---------------------------------------------------------------------------------------------------
				if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Projects"))
				{
					if (this.tablePanelProjects.Height > this.vScrollBarProjects.Height)
					{
						this.vScrollBarProjects.Maximum = this.tablePanelProjects.Height - this.vScrollBarProjects.Height + 10;
						this.vScrollBarProjects.Enabled = true;
						this.vScrollBarProjects.Value = 0;
						this.tablePanelProjects.Top = 0;
					}
					else
					{
						this.vScrollBarProjects.Maximum = 0;
						this.vScrollBarProjects.Enabled = false;
						this.vScrollBarProjects.Value = 0;
						this.tablePanelProjects.Top = 0;
					}
				}
				//---------------------------------------------------------------------------------------------------
				//Parts 검색 폼 사이즈 변경 시
				//---------------------------------------------------------------------------------------------------
				if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Parts"))
				{
					if (this.tablePanelParts.Height > this.vScrollBarParts.Height)
					{
						this.vScrollBarParts.Maximum = this.tablePanelParts.Height - this.vScrollBarParts.Height + 10;
						this.vScrollBarParts.Enabled = true;
						this.vScrollBarParts.Value = 0;
						this.tablePanelParts.Top = 0;
					}
					else
					{
						this.vScrollBarParts.Maximum = 0;
						this.vScrollBarParts.Enabled = false;
						this.vScrollBarParts.Value = 0;
						this.tablePanelParts.Top = 0;
					}
				}
				//---------------------------------------------------------------------------------------------------
				//Cads 검색 폼 사이즈 변경 시
				//---------------------------------------------------------------------------------------------------
				else if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Cads"))
				{
					if (this.tablePanelCads.Height > this.vScrollBarCads.Height)
					{
						this.vScrollBarCads.Maximum = this.tablePanelCads.Height - this.vScrollBarCads.Height + 10;
						this.vScrollBarCads.Enabled = true;
						this.vScrollBarCads.Value = 0;
						this.tablePanelCads.Top = 0;
					}
					else
					{
						this.vScrollBarCads.Maximum = 0;
						this.vScrollBarCads.Enabled = false;
						this.vScrollBarCads.Value = 0;
						this.tablePanelCads.Top = 0;
					}
				}
				//---------------------------------------------------------------------------------------------------
				//Workflow 검색 폼 사이즈 변경 시
				//---------------------------------------------------------------------------------------------------
				else if (this.tabSearch.SelectedIndex == this.tabSearch.TabPages.IndexOfKey("tabSearch_Workflow"))
				{
					if (this.tablePanelWorkflow.Height > this.vScrollBarWorkflow.Height)
					{
						this.vScrollBarWorkflow.Maximum = this.tablePanelWorkflow.Height - this.vScrollBarWorkflow.Height + 10;
						this.vScrollBarWorkflow.Enabled = true;
						this.vScrollBarWorkflow.Value = 0;
						this.tablePanelWorkflow.Top = 0;
					}
					else
					{
						this.vScrollBarWorkflow.Maximum = 0;
						this.vScrollBarWorkflow.Enabled = false;
						this.vScrollBarWorkflow.Value = 0;
						this.tablePanelWorkflow.Top = 0;
					}
				}
				//---------------------------------------------------------------------------------------------------
				// 어느거도 아닐 경우 ---> Tab Page 선택이 안된 경우로 오류!!!
				//---------------------------------------------------------------------------------------------------
				else
				{
					return;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>항목 조회(Search) Web Url 만들기</summary>
		/// <param name="sSPNAME">스토어드명</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_MakeSearchWeb_Url(string sSPNAME)
		{
			string sWebUrl = null;
			string sWebArg = null;

			try
			{
				sWebUrl = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;

				if (sSPNAME == "SP_SEARCH_PROJECTS_R")
				{
					//---------------------------------------------------------------------------------------------------
					//Part 조회 Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}&{28}={29}&{30}={31}&{32}={33}&{34}={35}&{36}={37}&{38}={39}&{40}={41}&{42}={43}&{44}={45}&{46}={47}&{48}={49}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, sSPNAME,
												"iPROJECTSTYPE", this.cmbProjects_ProjectsType.SelectedItem.ToString(),
												"iPROJECTSNAME", this.txtProjects_ProjectsName.Text.Replace("?", "_").Replace("*", "%"),
												"iPROJECTSNUMBER", this.txtProjects_ProjectsNumber.Text.Replace("?", "_").Replace("*", "%"),
												"iDESC", this.txtProjects_Description.Text.Replace("?", "_").Replace("*", "%"),
												"iSTATE", (this.cmbProjects_State.Tag != null) ? this.cmbProjects_State.Tag.ToString() : null,
												"iCRTBY", this.txtProjects_CreatedByOid.Text,
												"iMODBY", this.txtProjects_ModifiedByOid.Text,
												"iCRT_FROM", (this.dateProjects_CreationDateFrom.Checked == true) ? this.dateProjects_CreationDateFrom.Value.ToShortDateString() : null,
												"iCRT_TO", (this.dateProjects_CreationDateTo.Checked == true) ? this.dateProjects_CreationDateTo.Value.ToShortDateString() : null,
												"iMOD_FROM", (this.dateProjects_ModificationDateFrom.Checked == true) ? this.dateProjects_ModificationDateFrom.Value.ToShortDateString() : null,
												"iMOD_TO", (this.dateProjects_ModificationDateTo.Checked == true) ? this.dateProjects_ModificationDateTo.Value.ToShortDateString() : null,
												"iSTARTDATE", (this.dateProjects_StartDate.Checked == true) ? this.dateProjects_StartDate.Value.ToShortDateString() : null,
												"iENDDATE", (this.dateProjects_EndDate.Checked == true) ? this.dateProjects_EndDate.Value.ToShortDateString() : null,
												"iCONTRACTPERIOD", this.txtProjects_ContractPeriod.Text.Replace("?", "_").Replace("*", "%"),
												"iCUSTOMER", this.txtProjects_Customer.Text.Replace("?", "_").Replace("*", "%"),
												"iDEVELOPER", this.txtProjects_Developer.Text.Replace("?", "_").Replace("*", "%"),
												"iAMOUNTOFPROJECT", this.txtProjects_AmountOfProject.Text.Replace("?", "_").Replace("*", "%"),
												"iRESP_BUSINESS", this.txtProjects_ResponsibleBusiness.Text.Replace("?", "_").Replace("*", "%"),
												"iRESP_TEAM", this.txtProjects_ResponsibilityTeam.Text.Replace("?", "_").Replace("*", "%"),
												"iPROJECTMANAGER", this.txtProjects_ProjectManager.Text.Replace("?", "_").Replace("*", "%"),
												"iISSUEDATE", (this.dateProjects_IssuedDate.Checked == true) ? this.dateProjects_IssuedDate.Value.ToShortDateString() : null
												);
				}
				else if (sSPNAME == "SP_SEARCH_PARTS_R")
				{
					//---------------------------------------------------------------------------------------------------
					//Part 조회 Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}&{28}={29}&{30}={31}&{32}={33}&{34}={35}&{36}={37}&{38}={39}&{40}={41}&{42}={43}&{44}={45}&{46}={47}&{48}={49}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, sSPNAME,
												"iPARTTYPE", this.txtParts_PartTypeOid.Text,
												"iPARTNUMBER", this.txtParts_PartNumber.Text.Replace("?", "_").Replace("*", "%"),
												"iMODELNO", this.txtParts_ModelNo.Text.Replace("?", "_").Replace("*", "%"),
												"iPARTNAME", this.txtParts_PartName.Text.Replace("?", "_").Replace("*", "%"),
												"iMAKER", this.txtParts_MakerOid.Text,
												"iDETAILSPEC", this.txtParts_DetailSpec.Text.Replace("?", "_").Replace("*", "%"),
												"iDIMENSION", this.txtParts_Dimension.Text.Replace("?", "_").Replace("*", "%"),
												"iINSPECTION", this.txtParts_InspectionOid.Text,
												"iMATERIAL", this.txtParts_MaterialOid.Text,
												"iWEIGHT", this.txtParts_Weight.Text.Replace("?", "_").Replace("*", "%"),
												"iDESCRIPTION", this.txtParts_Description.Text.Replace("?", "_").Replace("*", "%"),
												"iREMARK", this.txtParts_Remark.Text.Replace("?", "_").Replace("*", "%"),
												"iSTATE", (this.cmbParts_State.Enabled == true) ? this.cmbParts_State.SelectedItem.ToString() : null,
												"iREVISION", this.txtParts_Revision.Text.Replace("?", "_").Replace("*", "%"),
												"iLATEST", (this.cmbParts_Latest.Tag != null) ? this.cmbParts_Latest.Tag.ToString() : null,
												"iCRTBY", this.txtParts_CreatedByOid.Text,
												"iMODBY", this.txtParts_ModifiedByOid.Text,
												"iCRT_FROM", (this.dateParts_CreationDateFrom.Checked == true) ? this.dateParts_CreationDateFrom.Value.ToShortDateString() : null,
												"iCRT_TO", (this.dateParts_CreationDateTo.Checked == true) ? this.dateParts_CreationDateTo.Value.ToShortDateString() : null,
												"iMOD_FROM", (this.dateParts_ModificationDateFrom.Checked == true) ? this.dateParts_ModificationDateFrom.Value.ToShortDateString() : null,
												"iMOD_TO", (this.dateParts_ModificationDateTo.Checked == true) ? this.dateParts_ModificationDateTo.Value.ToShortDateString() : null
												);
				}
				else if (sSPNAME == "SP_SEARCH_CADS_R")
				{
					//---------------------------------------------------------------------------------------------------
					//Cad 조회 Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}&{28}={29}&{30}={31}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, sSPNAME,
												"iCADTYPE", this.cmbCads_CadType.SelectedItem.ToString(),
												"iCADNUMBER", this.txtCads_CadNumber.Text.Replace("?", "_").Replace("*", "%"),
												"iCADNAME", this.txtCads_CadName.Text.Replace("?", "_").Replace("*", "%"),
												"iDESCRIPTION", this.txtCads_Description.Text.Replace("?", "_").Replace("*", "%"),
												"iREMARK", this.txtCads_Remark.Text.Replace("?", "_").Replace("*", "%"),
												"iFILENAME", this.txtCads_FileName.Text.Replace("?", "_").Replace("*", "%"),
												"iCRTBY", this.txtCads_CreatedByOid.Text,
												"iMODBY", this.txtCads_ModifiedByOid.Text,
												"iCRT_FROM", (this.dateCads_CreationDateFrom.Checked == true) ? this.dateCads_CreationDateFrom.Value.ToShortDateString() : null,
												"iCRT_TO", (this.dateCads_CreationDateTo.Checked == true) ? this.dateCads_CreationDateTo.Value.ToShortDateString() : null,
												"iMOD_FROM", (this.dateCads_ModificationDateFrom.Checked == true) ? this.dateCads_ModificationDateFrom.Value.ToShortDateString() : null,
												"iMOD_TO", (this.dateCads_ModificationDateTo.Checked == true) ? this.dateCads_ModificationDateTo.Value.ToShortDateString() : null
												);
				}
				else if (sSPNAME == "SP_SEARCH_WORKFLOW_R")
				{
					//---------------------------------------------------------------------------------------------------
					//Workflow 조회 Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, sSPNAME);
				}
				else
				{
					//---------------------------------------------------------------------------------------------------
					//---------------------------------------------------------------------------------------------------
					
				}
				sWebUrl += sWebArg;
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sWebUrl;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>선택 체크 항목 연결테이블(PDM_REL_PROJECTS_ITEMS)에 삽입 Web Url 만들기</summary>
		/// <param name="sSPNAME">스토어드명</param>
		/// <param name="sParentCid">부모 ClassID(Projects CID)</param>
		/// <param name="sParentOid">부모 ObjectID(Projects OID)</param>
		/// <param name="oDataGridView">검색 결과 그리드</param>
		/// <param name="nRow">검색 결과 그리드 행</param>
		/// <param name="sItemsCidColName">그리드의 ITEMS Cid 컬럼명</param>
		/// <param name="sItemsOidColName">그리드의 ITEMS Oid 컬럼명</param>
		/// <param name="sItemsDescColName">그리드의 ITEMS Desc 컬럼명</param>
		/// <param name="sSID">새션ID</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_Make_CUDRelatedPartsWeb_Url(string sSpName, string sParentCid, string sParentOid, DataGridView oDataGridView, int nRow, string sItemsCidColName, string sItemsOidColName, string sItemsDescColName, string sSID)
		{
			string sWebSql = null;

			try
			{
				sWebSql = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}&{28}={29}&{30}={31}&{32}={33}&{34}={35}&{36}={37}&{38}={39}&{40}={41}&{42}={43}&{44}={45}&{46}={47}&{48}={49}",
							ComCls.cConst.PC_WEBSQL_CMD_SP, sSpName,
							"iJOBMODE", "ADD_PARTS",
							"iREL_OID", 0,
							"iPRJS_CID", Convert.ToInt32(sParentCid),
							"iPRJS_OID", Convert.ToInt32(sParentOid),
							"iITEMS_CID", Convert.ToInt32(oDataGridView.Rows[nRow].Cells[sItemsCidColName].Value.ToString()),
							"iITEMS_OID", Convert.ToInt32(oDataGridView.Rows[nRow].Cells[sItemsOidColName].Value.ToString()),
							"iPARTTYPE", "",
							"iPARTLIBRARY", "",
							"iPARTNUMBER", "",
							"iPARTNAME", "",
							"iDESC", oDataGridView.Rows[nRow].Cells[sItemsDescColName].Value.ToString(),
							"iREVISION", "",
							"iUOM", "",
							"iMAKERPNO", "",
							"iMAKER", "",
							"iMATERIAL", "",
							"iINSPECTION", "",
							"iDETAILSPEC", "",
							"iUOW", "",
							"iDIMENSION", "",
							"iWEIGHT", "",
							"iREMARK", "",
							"iQTY", 1,
							ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return sWebSql;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>선택 체크 항목 연결테이블(PDM_REL_PROJECTS_DOCS / PDM_REL_ITEMS_DOCS)에 삽입 Web Url 만들기</summary>
		/// <param name="sSPNAME">스토어드명</param>
		/// <param name="sParentCid">부모 ClassID(Projects CID / Items CID)</param>
		/// <param name="sParentOid">부모 ObjectID(Projects OID / Items OID)</param>
		/// <param name="oDataGridView">검색 결과 그리드</param>
		/// <param name="nRow">검색 결과 그리드 행</param>
		/// <param name="sDocsCidColName">그리드의 DOCS Cid 컬럼명</param>
		/// <param name="sDocsOidColName">그리드의 DOCS Oid 컬럼명</param>
		/// <param name="sDocsDescColName">그리드의 DOCS Desc 컬럼명</param>
		/// <param name="sSID">새션ID</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_Make_CUDRelatedCadsWeb_Url(string sSpName, string sParentCid, string sParentOid, DataGridView oDataGridView, int nRow, string sDocsCidColName, string sDocsOidColName, string sDocsDescColName, string sSID)
		{
			string sWebSql = null;

			try
			{
				sWebSql = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}",
							ComCls.cConst.PC_WEBSQL_CMD_SP, sSpName,
							"iJOBMODE", "ADD_CADS",
							"iREL_OID", 0,
							"iPAR_CID", Convert.ToInt32(sParentCid),
							"iPAR_OID", Convert.ToInt32(sParentOid),
							"iSON_CID", Convert.ToInt32(oDataGridView.Rows[nRow].Cells[sDocsCidColName].Value.ToString()),
							"iSON_OID", Convert.ToInt32(oDataGridView.Rows[nRow].Cells[sDocsOidColName].Value.ToString()),
							"iCADTYPE", "",
							"iCADNUMBER", "",
							"iCADNAME", "",
							"iDESC", oDataGridView.Rows[nRow].Cells[sDocsDescColName].Value.ToString(),
							"iREVISION", "",
							"iREMARK", "",
							ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return sWebSql;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>웹 파즈 Url 만들기(TCUD)</summary>
		/// <param name="eCommand">트랜잭션 처리시 명령</param>
		/// <param name="sSID">트랜잭션 처리시 세션 ID</param>
		/// <param name="nRow">트랜잭션 처리시 데이터그리드뷰 행번호</param>
		/// <param name="sUrl">트랜잭션 처리시WebParse 경로 전달</param>
		/// <returns>bool</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private bool mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND eCommand, string sSID, DataGridView oDataGridView, string sColName, int nRow, ref string sUrl, string sWebSql)
		{
			bool bResult = true;
			string sStyle = null;
			string sCommand = null;
			bool sJobMode = false;

			try
			{
				sStyle = ComCls.cConst.PC_WEBSQL_CMD_SP;
				//---------------------------------------------------------------------------------------------------
				//트랜잭션 모드 명령어 & 입력/수정/삭제 작업 처리
				//---------------------------------------------------------------------------------------------------
				switch (eCommand)
				{
					//데이터베이스 연결
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT:
						sCommand = string.Format("{0}={1}", sStyle, ComCls.cConst.PC_DB_TRANSACTION_CONNECT);

						break;
					//데이터베이스 트랜잭션 시작
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_BEGINTRAN,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 Sql 처리(입력/수정/삭제)
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL:
						//sJobMode = oDataGridView.Rows[nRow].Cells[sColName].Value.ToString();
						//if (sJobMode != ComCls.cConst.PC_DB_JOBMODE_READ)

						sJobMode = Convert.ToBoolean(oDataGridView.Rows[nRow].Cells[sColName].Value);
						if (sJobMode == true)
						{
							//데이터베이스 Sql 명령 만들기
							sCommand = sWebSql;
						}
						else
						{
							bResult = false;
						}
						break;
					//데이터베이스 트랜잭션 완료
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_COMMIT,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 트랜잭션 취소
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_ROLLBACK,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 연결 끊기
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.DISCONNECT:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_DISCONNECT,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
				}
				//---------------------------------------------------------------------------------------------------
				//전체 경로 만들기
				//---------------------------------------------------------------------------------------------------
				if (bResult == true)
				{
					sUrl = string.Format("{0}?{1}={2}&{3}={4}&{5}={6}&{7}",
										ComCls.cConst.PC_WEBSQL_WEBPARSE_URL,
										ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_TCUD,
										ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
										ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
										sCommand);
				}
				else sUrl = null;
				//---------------------------------------------------------------------------------------------------
			}
			catch (Exception ex)
			{
				sUrl = null;
				bResult = false;

				throw ex;
			}

			return bResult;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>검색 조건들에 의한 검색 결과를 그리드에 출력</summary>
		/// <param name="nOID">노드 ObjectID(Key)</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_ReadSearchDataGridView(DataGridView oDataGridView)
		{
			//---------------------------------------------------------------------------------------------------
			//Web Sql 정보 관련
			//---------------------------------------------------------------------------------------------------
			string sWebSql = null;
			//string sWebArg = null;
			//---------------------------------------------------------------------------------------------------
			//Web Sql 실행 관련
			//---------------------------------------------------------------------------------------------------
			string sDataSet = null;
			DataSet oDataSet = null;
			int nRowCount = 0;
			int nColCount = 0;
			string sErrorMsg = null;
			//---------------------------------------------------------------------------------------------------
			//Web Sql 결과 관련
			//---------------------------------------------------------------------------------------------------
			string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
			string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

			try
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 만들기
				//---------------------------------------------------------------------------------------------------
				sWebSql = this.mf_MakeSearchWeb_Url(this.mv_sSearchSPName);
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행
				//---------------------------------------------------------------------------------------------------
				if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
				{
					if (nRowCount > 0)
					{
						this.mv_oFunc.pf_WpOutputDataSetToDataGridView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, oDataGridView, sDataSet, oDataSet, true);
					}
					else
					{
						oDataGridView.Rows.Clear();
					}
				}
				else
				{
					if (sErrorMsg != null)
					{
						ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadSearchDataGridView()");
					}
				}
				//---------------------------------------------------------------------------------------------------
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				//---------------------------------------------------------------------------------------------------
				//Debug Agent 인스턴스 있는 경우
				//---------------------------------------------------------------------------------------------------
				if (this.mv_frmMain.pv_frmDebugAgent != null)
				{
					this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
				}
				//---------------------------------------------------------------------------------------------------
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>검색 후 선택한 Part 정보들을 Relation Table (PDM_REL_PROJECTS_ITEMS)저장</summary>
		/// <param name="sSpName">스토어드명</param>
		/// <param name="sParentCid">부모 ClassID(Projects CID)</param>
		/// <param name="sParentOid">부모 ObjectID(Projects OID)</param>
		/// <param name="oDataGridView">검색 결과 그리드</param>
		/// <param name="sChkBoxColName">그리드의 ITEMS Checkbox 컬럼명</param>
		/// <param name="sCidColName">그리드의 ITEMS Cid 컬럼명</param>
		/// <param name="sOidColName">그리드의 ITEMS Oid 컬럼명</param>
		/// <param name="sDescColName">그리드의 ITEMS Desc 컬럼명</param>
		/// <returns>bool</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private bool mf_AddSearch_RelatedPart(string sSpName, string sParentCid, string sParentOid, DataGridView oDataGridView, string sChkBoxColName, string sCidColName, string sOidColName, string sDescColName)
		{
			bool bResult = false;
			bool bAllResult = false;
			string sDataSet = null;
			DataSet oDataSet = null;
			int nRowCount = 0;
			int nColCount = 0;
			string sErrorMsg = null;
			string sSID = null;
			//---------------------------------------------------------------------------------------------------
			string sUrl = null;
			string sWebSql = null;
			string sUserErrorMsg = null;
			//---------------------------------------------------------------------------------------------------

			try
			{
				//데이터베이스 연결 명령 만들기
				if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT, null, null, null, -1, ref sUrl, null) == true)
				{
					//데이터베이스 연결
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
					{
						//세션 ID가 생성된 경우
						if (sSID != null)
						{
							//데이터베이스 트랜잭션 시작 명령 만들기
							if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN, sSID, null, null, -1, ref sUrl, null) == true)
							{
								//데이터베이스 트랜잭션 시작
								if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
								{
									//---------------------------------------------------------------------------------------------------
									//데이터그리드뷰를 스캔해서 수정된 행을 DB-UPDATE 처리
									//---------------------------------------------------------------------------------------------------
									for (int nRow = 0; nRow < oDataGridView.Rows.Count; nRow++)
									{
										sWebSql = this.mf_Make_CUDRelatedPartsWeb_Url(sSpName, sParentCid, sParentOid, oDataGridView, nRow, sCidColName, sOidColName, sDescColName, sSID);

										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, oDataGridView, sChkBoxColName, nRow, ref sUrl, sWebSql) == true)
										{
											//데이터베이스 Sql 처리
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//데이터베이스 처리 성공인 경우
												if (nRowCount > 0)
												{
													bResult = true;
												}
												else
												{
													bResult = false;

													sUserErrorMsg = string.Format("{0}번 행에서 오류", nRow + 1);

													//에러 발생 행 선택
													this.mv_oFunc.pf_DataGridViewAllUnSelectCell(oDataGridView, nRow);

													break;
												}
												//---------------------------------------------------------------------------------------------------
											}
											else
											{
												bResult = false;
												
												sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg); 
												
												break;
											}
										}
									}
									//---------------------------------------------------------------------------------------------------
									//데이터베이스 트랜잭션 처리
									//---------------------------------------------------------------------------------------------------
									if (bResult == true)
									{
										//데이터베이스 트랜잭션 완료 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT, sSID, null, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 완료
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//결과 메세지 출력
												ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);

												bAllResult = true;
											}
										}
									}
									else
									{
										//데이터베이스 트랜잭션 취소 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK, sSID, null, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 취소
											this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID);

											ComCls.cException.MessageBoxShow(this, sUserErrorMsg, ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
										}
									}
									//---------------------------------------------------------------------------------------------------
								}
							}
						}
					}
				}

			}
			catch (Exception ex)
			{
				throw ex;
			}

			return bAllResult;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>검색 후 선택한 Cad 정보들을 Relation Table (PDM_REL_PROJECTS_DOCS / PDM_REL_ITEMS_DOCS)저장</summary>
		/// <param name="sSpName">스토어드명</param>
		/// <param name="sParentCid">부모 ClassID(Projects CID / Items CID)</param>
		/// <param name="sParentOid">부모 ObjectID(Projects OID / Items OID)</param>
		/// <param name="oDataGridView">검색 결과 그리드</param>
		/// <param name="sChkBoxColName">그리드의 DOCS Checkbox 컬럼명</param>
		/// <param name="sCidColName">그리드의 DOCS Cid 컬럼명</param>
		/// <param name="sOidColName">그리드의 DOCS Oid 컬럼명</param>
		/// <param name="sDescColName">그리드의 DOCS Desc 컬럼명</param>
		/// <returns>bool</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private bool mf_AddSearch_RelatedCads(string sSpName, string sParentCid, string sParentOid, DataGridView oDataGridView, string sChkBoxColName, string sCidColName, string sOidColName, string sDescColName)
		{
			bool bResult = false;
			bool bAllResult = false;
			string sDataSet = null;
			DataSet oDataSet = null;
			int nRowCount = 0;
			int nColCount = 0;
			string sErrorMsg = null;
			string sSID = null;
			//---------------------------------------------------------------------------------------------------
			string sUrl = null;
			string sWebSql = null;
			string sUserErrorMsg = null;
			//---------------------------------------------------------------------------------------------------

			try
			{
				//데이터베이스 연결 명령 만들기
				if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT, null, null, null, -1, ref sUrl, null) == true)
				{
					//데이터베이스 연결
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
					{
						//세션 ID가 생성된 경우
						if (sSID != null)
						{
							//데이터베이스 트랜잭션 시작 명령 만들기
							if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN, sSID, null, null, -1, ref sUrl, null) == true)
							{
								//데이터베이스 트랜잭션 시작
								if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
								{
									//---------------------------------------------------------------------------------------------------
									//데이터그리드뷰를 스캔해서 수정된 행을 DB-UPDATE 처리
									//---------------------------------------------------------------------------------------------------
									for (int nRow = 0; nRow < oDataGridView.Rows.Count; nRow++)
									{
										sWebSql = this.mf_Make_CUDRelatedCadsWeb_Url(sSpName, sParentCid, sParentOid, oDataGridView, nRow, sCidColName, sOidColName, sDescColName, sSID);
										
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, oDataGridView, sChkBoxColName, nRow, ref sUrl, sWebSql) == true)
										{
											//데이터베이스 Sql 처리
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//데이터베이스 처리 성공인 경우
												if (nRowCount > 0)
												{
													bResult = true;
												}
												else
												{
													bResult = false;

													sUserErrorMsg = string.Format("{0}번 행에서 오류", nRow + 1);

													//에러 발생 행 선택
													this.mv_oFunc.pf_DataGridViewAllUnSelectCell(oDataGridView, nRow);

													break;
												}
												//---------------------------------------------------------------------------------------------------
											}
											else
											{
												bResult = false;
												
												sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg); 
												
												break;
											}
										}
									}
									//---------------------------------------------------------------------------------------------------
									//데이터베이스 트랜잭션 처리
									//---------------------------------------------------------------------------------------------------
									if (bResult == true)
									{
										//데이터베이스 트랜잭션 완료 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT, sSID, null, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 완료
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//결과 메세지 출력
												ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);

												bAllResult = true;
											}
										}
									}
									else
									{
										//데이터베이스 트랜잭션 취소 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK, sSID, null, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 취소
											this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID);

											ComCls.cException.MessageBoxShow(this, sUserErrorMsg, ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
										}
									}
									//---------------------------------------------------------------------------------------------------
								}
							}
						}
					}
				}

			}
			catch (Exception ex)
			{
				throw ex;
			}

			return bAllResult;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>선택한 부품들을 BOM 그리드에 행 추가</summary>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_AddRowBomGrid()
		{
			string[] saDataSetCols = null;
			string sLevel = null;
			int nLevel = -1;

			try
			{
				saDataSetCols = new string[26];

				//Add Exist Part
				if (this.mv_sFormTypeName.Contains("Add Exist Parts") == true)
				{
					for (int nRow = 0; nRow < this.dgvParts.Rows.Count; nRow++)
					{
						sLevel = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Level"].Value.ToString();
						nLevel = int.Parse(sLevel.Replace("*", "")) + 1;
						sLevel = nLevel.ToString().PadLeft(nLevel, '*');

						if (Convert.ToBoolean(this.dgvParts.Rows[nRow].Cells["dgvParts_ChkBox"].Value) == true)
						{
							saDataSetCols[0] = ComCls.cConst.PC_DB_JOBMODE_CREATE;
							saDataSetCols[1] = sLevel;																				//레벨
							saDataSetCols[2] = "false";
							saDataSetCols[3] = this.dgvParts.Rows[nRow].Cells["dgvParts_Oid"].Value.ToString();
							saDataSetCols[4] = this.dgvParts.Rows[nRow].Cells["dgvParts_Cid"].Value.ToString();
							saDataSetCols[5] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Oid"].Value.ToString();
							saDataSetCols[6] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Cid"].Value.ToString();
							saDataSetCols[7] = "-10";																				//TreeOid
							saDataSetCols[8] = "2110";																				//TreeCid
							saDataSetCols[9] = "10";																				//SEQ
							saDataSetCols[10] = "1";																					//QTY
							saDataSetCols[11] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartType"].Value.ToString();
							saDataSetCols[12] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartNo"].Value.ToString();
							saDataSetCols[13] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartName"].Value.ToString();
							saDataSetCols[14] = this.dgvParts.Rows[nRow].Cells["dgvParts_State"].Value.ToString();
							saDataSetCols[15] = this.dgvParts.Rows[nRow].Cells["dgvParts_Maker"].Value.ToString();
							saDataSetCols[16] = this.dgvParts.Rows[nRow].Cells["dgvParts_ModelNo"].Value.ToString();
							saDataSetCols[17] = this.dgvParts.Rows[nRow].Cells["dgvParts_Revision"].Value.ToString();
							saDataSetCols[18] = this.dgvParts.Rows[nRow].Cells["dgvParts_Material"].Value.ToString();
							saDataSetCols[19] = this.dgvParts.Rows[nRow].Cells["dgvParts_Inspection"].Value.ToString();
							saDataSetCols[20] = this.dgvParts.Rows[nRow].Cells["dgvParts_DetailSpec"].Value.ToString();
							saDataSetCols[21] = this.dgvParts.Rows[nRow].Cells["dgvParts_Dimension"].Value.ToString();
							saDataSetCols[22] = this.dgvParts.Rows[nRow].Cells["dgvParts_CreatedBy"].Value.ToString();
							saDataSetCols[23] = this.dgvParts.Rows[nRow].Cells["dgvParts_CreationDate"].Value.ToString();
							saDataSetCols[24] = this.dgvParts.Rows[nRow].Cells["dgvParts_ModificationDate"].Value.ToString();
							saDataSetCols[25] = this.dgvParts.Rows[nRow].Cells["dgvParts_ApprovalDate"].Value.ToString();

							this.mv_oDataGridView.Rows.Add(saDataSetCols);
						}
					}
				}
				//Replace Exist Part
				if (this.mv_sFormTypeName.Contains("Replace Exist Parts") == true)
				{
					for (int nRow = 0; nRow < this.dgvParts.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvParts.Rows[nRow].Cells["dgvParts_ChkBox"].Value) == true)
						{
							saDataSetCols[0] = ComCls.cConst.PC_DB_JOBMODE_UPDATE;
							saDataSetCols[1] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Level"].Value.ToString();		//레벨
							saDataSetCols[2] = "false";
							saDataSetCols[3] = this.dgvParts.Rows[nRow].Cells["dgvParts_Oid"].Value.ToString();
							saDataSetCols[4] = this.dgvParts.Rows[nRow].Cells["dgvParts_Cid"].Value.ToString();
							saDataSetCols[5] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_ParOid"].Value.ToString();		//부모 Item Oid(BOM에서 선택된 Items의 부모Oid)
							saDataSetCols[6] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_ParCid"].Value.ToString();		//부모 Item Cid(BOM에서 선택된 Items의 부모Cid)
							saDataSetCols[7] = "-10";																				//TreeOid
							saDataSetCols[8] = "2110";																				//TreeCid
							saDataSetCols[9] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Seq"].Value.ToString();			//SEQ
							saDataSetCols[10] = this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Qty"].Value.ToString();			//QTY
							saDataSetCols[11] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartType"].Value.ToString();
							saDataSetCols[12] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartNo"].Value.ToString();
							saDataSetCols[13] = this.dgvParts.Rows[nRow].Cells["dgvParts_PartName"].Value.ToString();
							saDataSetCols[14] = this.dgvParts.Rows[nRow].Cells["dgvParts_State"].Value.ToString();
							saDataSetCols[15] = this.dgvParts.Rows[nRow].Cells["dgvParts_Maker"].Value.ToString();
							saDataSetCols[16] = this.dgvParts.Rows[nRow].Cells["dgvParts_ModelNo"].Value.ToString();
							saDataSetCols[17] = this.dgvParts.Rows[nRow].Cells["dgvParts_Revision"].Value.ToString();
							saDataSetCols[18] = this.dgvParts.Rows[nRow].Cells["dgvParts_Material"].Value.ToString();
							saDataSetCols[19] = this.dgvParts.Rows[nRow].Cells["dgvParts_Inspection"].Value.ToString();
							saDataSetCols[20] = this.dgvParts.Rows[nRow].Cells["dgvParts_DetailSpec"].Value.ToString();
							saDataSetCols[21] = this.dgvParts.Rows[nRow].Cells["dgvParts_Dimension"].Value.ToString();
							saDataSetCols[22] = this.dgvParts.Rows[nRow].Cells["dgvParts_CreatedBy"].Value.ToString();
							saDataSetCols[23] = this.dgvParts.Rows[nRow].Cells["dgvParts_CreationDate"].Value.ToString();
							saDataSetCols[24] = this.dgvParts.Rows[nRow].Cells["dgvParts_ModificationDate"].Value.ToString();
							saDataSetCols[25] = this.dgvParts.Rows[nRow].Cells["dgvParts_ApprovalDate"].Value.ToString();

							this.mv_oDataGridView.Rows.Add(saDataSetCols);
						}
					}

					if (this.mv_oDataGridView.SelectedRows != null)
					{
						this.mv_oDataGridView.SelectedRows[0].Cells["dgvBom_Action"].Value = ComCls.cConst.PC_DB_JOBMODE_DELETE;
					}

				}
				this.mv_oDataGridView.Refresh();
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 함수(Method)/API - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 함수(Method) 선언 예</summary>
		/// <param name="sStr">공용(public) 함수(Method) 인자 선언 예</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pf_Hello(string sStr)
		{
			try
			{
				sStr = "Hello...";
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sStr;
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 시스템 이벤트함수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 없음!
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Form 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Form 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 로드 될 때 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmSearch_Load(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//폼 타이틀 만들기
					//---------------------------------------------------------------------------------------------------
					this.Text = this.mv_sFormTypeName + " " + this.Text;
					//---------------------------------------------------------------------------------------------------
					//공용함수 인스턴스 생성
					//---------------------------------------------------------------------------------------------------
					this.mv_oFunc = new ComCls.cFunction(this);
					//---------------------------------------------------------------------------------------------------
					//Tab Title 제거
					//---------------------------------------------------------------------------------------------------
					this.tabSearch.Appearance = TabAppearance.FlatButtons;
					this.tabSearch.ItemSize = new Size(0, 1);
					this.tabSearch.SizeMode = TabSizeMode.Fixed;
					//---------------------------------------------------------------------------------------------------
					//폼 종류별 필요 설정 초기화
					//---------------------------------------------------------------------------------------------------
					this.mf_InitSearchForm(this.mv_sFormTypeName);
					//---------------------------------------------------------------------------------------------------
					//폼에 따른 스크롤바 초기화
					//---------------------------------------------------------------------------------------------------
					this.mf_InitVsScrollBar();
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 언로드 될 때 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmSearch_FormClosing(object sender, FormClosingEventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_CheckBomExitMsg(this.mv_frmMain.pv_bChildFormExitMsgDispOK, this.Text, ref e);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 언로드 되고 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmSearch_FormClosed(object sender, FormClosedEventArgs e)
			{
				try
				{
					//폼 닫기가 확정된 경우에만 해쉬에서 제거
					this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.EXIT, this.Text, null, null);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>splitterLeft0 (Projects Form) 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeft0_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft0.Width = ComCls.cConst.PC_SEARCH_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>splitterLeft1 (Parts Form) 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeft1_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft1.Width = ComCls.cConst.PC_SEARCH_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>splitterLeft2 (Cads Form) 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeft2_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft2.Width = ComCls.cConst.PC_SEARCH_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>splitterLeft3 (Documents Form) 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeft3_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft3.Width = ComCls.cConst.PC_SEARCH_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>splitterLeft4 (Workflow Form) 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeft4_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft4.Width = ComCls.cConst.PC_SEARCH_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Projects의 스크롤 바 이동시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void vScrollBarProjects_Scroll(object sender, ScrollEventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//Project 스크롤이 초기값보다 내려갔을경우
					//---------------------------------------------------------------------------------------------------
					if (e.OldValue < e.NewValue)
					{
						this.tablePanelProjects.Top = this.tablePanelProjects.Top - (e.NewValue - e.OldValue);
					}
					//---------------------------------------------------------------------------------------------------
					//Project 스크롤이 초기값보다 올라갈경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						this.tablePanelProjects.Top = this.tablePanelProjects.Top + (e.OldValue - e.NewValue);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts의 스크롤 바 이동시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void vScrollBarParts_Scroll(object sender, ScrollEventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//Part 스크롤이 초기값보다 내려갔을경우
					//---------------------------------------------------------------------------------------------------
					if (e.OldValue < e.NewValue)
					{
						this.tablePanelParts.Top = this.tablePanelParts.Top - (e.NewValue - e.OldValue);
					}
					//---------------------------------------------------------------------------------------------------
					//Part 스크롤이 초기값보다 올라갈경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						this.tablePanelParts.Top = this.tablePanelParts.Top + (e.OldValue - e.NewValue);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Cads의 스크롤 바 이동시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void vScrollBarCads_Scroll(object sender, ScrollEventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//Cad 스크롤이 초기값보다 내려갔을경우
					//---------------------------------------------------------------------------------------------------
					if (e.OldValue < e.NewValue)
					{
						this.tablePanelCads.Top = this.tablePanelCads.Top - (e.NewValue - e.OldValue);
					}
					//---------------------------------------------------------------------------------------------------
					//Cad 스크롤이 초기값보다 올라갈경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						this.tablePanelCads.Top = this.tablePanelCads.Top + (e.OldValue - e.NewValue);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Workflow의 스크롤 바 이동시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void vScrollBarWorkflow_Scroll(object sender, ScrollEventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//Workflow 스크롤이 초기값보다 내려갔을경우
					//---------------------------------------------------------------------------------------------------
					if (e.OldValue < e.NewValue)
					{
						this.tablePanelWorkflow.Top = this.tablePanelWorkflow.Top - (e.NewValue - e.OldValue);
					}
					//---------------------------------------------------------------------------------------------------
					//Workflow 스크롤이 초기값보다 올라갈경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						this.tablePanelWorkflow.Top = this.tablePanelWorkflow.Top + (e.OldValue - e.NewValue);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 사이즈 변경될 때 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmSearch_ResizeEnd(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//스크롤바 상태 변경 및 설정
					//---------------------------------------------------------------------------------------------------
					this.mf_ChangeVsScrollBarStatus();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [PROJECTS - Search 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//PROJECTS - Search 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Created By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtProjects_CreatedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtProjects_CreatedBy, this.txtProjects_CreatedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Modified By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtProjects_ModifiedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtProjects_ModifiedBy, this.txtProjects_ModifiedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Search 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProjects_Search_Click(object sender, EventArgs e)
			{
				try
				{
					this.mf_ReadSearchDataGridView(this.dgvProjects);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Undo 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProjects_Undo_Click(object sender, EventArgs e)
			{
				try
				{
					//this.txtCads_CadNumber.Text = null;
					//this.txtCads_CadName.Text = null;
					//this.txtCads_Description.Text = null;
					//this.txtCads_Remark.Text = null;
					//this.txtCads_FileName.Text = null;
					//this.txtCads_CreatedBy.Text = null;
					//this.txtCads_CreatedByOid.Text = null;
					//this.txtCads_ModifiedBy.Text = null;
					//this.txtCads_ModifiedByOid.Text = null;
					//this.dateCads_CreationDateFrom.Value = DateTime.Now.Date;
					//this.dateCads_CreationDateTo.Value = DateTime.Now.Date;
					//this.dateCads_ModificationDateFrom.Value = DateTime.Now.Date;
					//this.dateCads_ModificationDateTo.Value = DateTime.Now.Date;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProjects_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvProjects);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [PARTS - Search 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//PARTS - Search 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Part Type 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_PartType_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					//frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.txtParts_PartType, this.txtParts_PartTypeOid, "Part");
					//ofrmSearchCodeList.ShowDialog();
					frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.txtParts_PartType, this.txtParts_PartTypeOid, "Part Type");
					ofrmSearchCodeList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Maker 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_Maker_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.txtParts_Maker, this.txtParts_MakerOid, "Maker");
					ofrmSearchCodeList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Insepction 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_Inspection_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.txtParts_Inspection, this.txtParts_InspectionOid, "Inspection");
					ofrmSearchCodeList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Material 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_Material_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.txtParts_Material, this.txtParts_MaterialOid, "Material");
					ofrmSearchCodeList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Latest 콤보 값 변경시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void cmbParts_Latest_SelectedIndexChanged(object sender, EventArgs e)
			{
				try
				{
					if (this.cmbParts_Latest.SelectedItem != null)
					{
						if (this.cmbParts_Latest.SelectedItem.ToString() == "Public")
						{
							this.cmbParts_Latest.Tag = 0;
							this.cmbParts_State.Enabled = false;
						}
						else if (this.cmbParts_Latest.SelectedItem.ToString() == "Latest")
						{
							this.cmbParts_Latest.Tag = 1;
							this.cmbParts_State.Enabled = false;
						}
						else
						{
							this.cmbParts_Latest.Tag = null;
							this.cmbParts_State.Enabled = true;
						}

					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Created By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_CreatedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtParts_CreatedBy, this.txtParts_CreatedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Modified By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtParts_ModifiedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtParts_ModifiedBy, this.txtParts_ModifiedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Search 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Search_Click(object sender, EventArgs e)
			{
				try
				{
					this.mf_ReadSearchDataGridView(this.dgvParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Undo 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Undo_Click(object sender, EventArgs e)
			{
				try
				{
					this.txtParts_PartType.Text = null;
					this.txtParts_PartTypeOid.Text = null;
					this.txtParts_PartNumber.Text = null;
					this.txtParts_ModelNo.Text = null;
					this.txtParts_PartName.Text = null;
					this.txtParts_Maker.Text = null;
					this.txtParts_MakerOid.Text = null;
					this.txtParts_DetailSpec.Text = null;
					this.txtParts_Dimension.Text = null;
					this.txtParts_Inspection.Text = null;
					this.txtParts_InspectionOid.Text = null;
					this.txtParts_Material.Text = null;
					this.txtParts_MaterialOid.Text = null;
					this.txtParts_Weight.Text = null;
					this.txtParts_Description.Text = null;
					this.txtParts_Remark.Text = null;
					this.txtParts_Revision.Text = null;
					this.txtParts_CreatedBy.Text = null;
					this.txtParts_CreatedByOid.Text = null;
					this.txtParts_ModifiedBy.Text = null;
					this.txtParts_ModifiedByOid.Text = null;
					this.dateParts_CreationDateFrom.Value = DateTime.Now.Date;
					this.dateParts_CreationDateTo.Value = DateTime.Now.Date;
					this.dateParts_ModificationDateFrom.Value = DateTime.Now.Date;
					this.dateParts_ModificationDateTo.Value = DateTime.Now.Date;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Ok 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Ok_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvParts.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvParts.Rows[nRow].Cells["dgvParts_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//CheckBox에 체크항목(REL에 연결할 캐드가 있다면)이 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_CREATE_PARTS_SELECTED, ComCls.cConst.PC_MSG_CREATE_PARTS_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							//프로젝트-아이템 연결테이블(REL_PROJECTS_ITEMS) 에 등록인 경우
							if (this.mv_frmProjects != null && this.txtParts_RelSpName.Text.Contains("PROJECTS"))
							{
								//---------------------------------------------------------------------------------------------------
								//TCUD를 사용한 DB 작업 및 결과 반환
								//---------------------------------------------------------------------------------------------------
								if (this.mf_AddSearch_RelatedPart(this.txtParts_RelSpName.Text, this.txtParts_ParentCid.Text, this.txtParts_ParentOid.Text, this.dgvParts, "dgvParts_ChkBox", "dgvParts_Cid", "dgvParts_Oid", "dgvParts_Description") == true)
								{
										this.mv_frmProjects.mf_ReadRelatedPartGridView(Convert.ToInt32(this.txtParts_ParentCid.Text), Convert.ToInt32(this.txtParts_ParentOid.Text), "");
								}
							}
							//BOM 그리드에 추가인 경우
							if (this.mv_frmParts != null && this.txtParts_RelSpName.Text.Contains("PARTS"))
							{
								this.mf_AddRowBomGrid();
							}

							this.Close();
						}
					}
					else
					{
						ComCls.cException.MessageBoxShow(this, ComCls.cConst.PC_ERROR_NO_PARTS_SELECTED_ADD, ComCls.cConst.PC_ERROR_NO_PARTS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Apply 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Apply_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvParts.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvParts.Rows[nRow].Cells["dgvParts_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//CheckBox에 체크항목(REL에 연결할 캐드가 있다면)이 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_CREATE_PARTS_SELECTED, ComCls.cConst.PC_MSG_CREATE_PARTS_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							//프로젝트-아이템 연결테이블(REL_PROJECTS_ITEMS) 에 등록인 경우
							if (this.mv_frmProjects != null && this.txtParts_RelSpName.Text.Contains("PROJECTS"))
							{
								//---------------------------------------------------------------------------------------------------
								//TCUD를 사용한 DB 작업 및 결과 반환
								//---------------------------------------------------------------------------------------------------
								if (this.mf_AddSearch_RelatedPart(this.txtParts_RelSpName.Text, this.txtParts_ParentCid.Text, this.txtParts_ParentOid.Text, this.dgvParts, "dgvParts_ChkBox", "dgvParts_Cid", "dgvParts_Oid", "dgvParts_Description") == true)
								{
										this.mv_frmProjects.mf_ReadRelatedPartGridView(Convert.ToInt32(this.txtParts_ParentCid.Text), Convert.ToInt32(this.txtParts_ParentOid.Text), "");
								}
							}
							//BOM 그리드에 추가인 경우
							if (this.mv_frmParts != null && this.txtParts_RelSpName.Text.Contains("PARTS"))
							{
								this.mf_AddRowBomGrid();
							}
						}
					}
					else
					{
						ComCls.cException.MessageBoxShow(this, ComCls.cConst.PC_ERROR_NO_PARTS_SELECTED_ADD, ComCls.cConst.PC_ERROR_NO_PARTS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Cancel 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnParts_Close_Click(object sender, EventArgs e)
			{
				try
				{
					this.Close();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>상세 화면을 볼 Part 선택 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvParts_CellContentClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvParts.SelectedRows != null && e.ColumnIndex == this.dgvParts.SelectedRows[0].Cells["dgvParts_PartName"].ColumnIndex)
					{
						frmParts ofrmParts = new frmParts(this.mv_frmMain, this.dgvParts.SelectedRows[0].Cells["dgvParts_Cid"].Value.ToString(),
															this.dgvParts.SelectedRows[0].Cells["dgvParts_Oid"].Value.ToString(),
															this.dgvParts.SelectedRows[0].Cells["dgvParts_PartNo"].Value.ToString() + "(" + this.dgvParts.SelectedRows[0].Cells["dgvParts_PartName"].Value.ToString() + ")");

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "Parts" + " - " + this.dgvParts.SelectedRows[0].Cells["dgvParts_PartNo"].Value.ToString() + "(" + this.dgvParts.SelectedRows[0].Cells["dgvParts_PartName"].Value.ToString() + ")",
													(object)ofrmParts, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [CAD - Search 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//CAD - Search 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Created By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtCads_CreatedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtCads_CreatedBy, this.txtCads_CreatedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Modified By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtCads_ModifiedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtCads_ModifiedBy, this.txtCads_ModifiedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Search 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Search_Click(object sender, EventArgs e)
			{
				try
				{
					this.mf_ReadSearchDataGridView(this.dgvCads);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Undo 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Undo_Click(object sender, EventArgs e)
			{
				try
				{
					this.txtCads_CadNumber.Text = null;
					this.txtCads_CadName.Text = null;
					this.txtCads_Description.Text = null;
					this.txtCads_Remark.Text = null;
					this.txtCads_FileName.Text = null;
					this.txtCads_CreatedBy.Text = null;
					this.txtCads_CreatedByOid.Text = null;
					this.txtCads_ModifiedBy.Text = null;
					this.txtCads_ModifiedByOid.Text = null;
					this.dateCads_CreationDateFrom.Value = DateTime.Now.Date;
					this.dateCads_CreationDateTo.Value = DateTime.Now.Date;
					this.dateCads_ModificationDateFrom.Value = DateTime.Now.Date;
					this.dateCads_ModificationDateTo.Value = DateTime.Now.Date;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvCads);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Ok 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Ok_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvCads.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvCads.Rows[nRow].Cells["dgvCads_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//CheckBox에 체크항목(REL에 연결할 캐드가 있다면)이 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_CREATE_CADS_SELECTED, ComCls.cConst.PC_MSG_CREATE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							//---------------------------------------------------------------------------------------------------
							//TCUD를 사용한 DB 작업 및 결과 반환
							//---------------------------------------------------------------------------------------------------
							if (this.mf_AddSearch_RelatedCads(this.txtCads_RelSpName.Text, this.txtCads_ParentCid.Text, this.txtCads_ParentOid.Text, this.dgvCads, "dgvCads_ChkBox", "dgvCads_Cid", "dgvCads_Oid", "dgvCads_Description") == true)
							{
								//프로젝트-문서 연결테이블(REL_PROJECTS_DOCS) 에 등록인 경우
								if (this.mv_frmProjects != null && this.txtCads_RelSpName.Text.Contains("PROJECTS"))
								{
									this.mv_frmProjects.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtCads_ParentCid.Text), Convert.ToInt32(this.txtCads_ParentOid.Text), "");
								}
								//파트-문서 연결테이블(REL_ITEMS_DOCS) 에 등록인 경우
								if (this.mv_frmParts != null && this.txtCads_RelSpName.Text.Contains("PARTS"))
								{
									this.mv_frmParts.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtCads_ParentCid.Text), Convert.ToInt32(this.txtCads_ParentOid.Text), "");
								}
							}
							this.Close();
						}
					}
					else
					{
						ComCls.cException.MessageBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_SELECTED_ADD, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Apply 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Apply_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvCads.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvCads.Rows[nRow].Cells["dgvCads_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//CheckBox에 체크항목(REL에 연결할 캐드가 있다면)이 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_CREATE_CADS_SELECTED, ComCls.cConst.PC_MSG_CREATE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							//---------------------------------------------------------------------------------------------------
							//TCUD를 사용한 DB 작업 및 결과 반환
							//---------------------------------------------------------------------------------------------------
							if (this.mf_AddSearch_RelatedCads(this.txtCads_RelSpName.Text, this.txtCads_ParentCid.Text, this.txtCads_ParentOid.Text, this.dgvCads, "dgvCads_ChkBox", "dgvCads_Cid", "dgvCads_Oid", "dgvCads_Description") == true)
							{
								//프로젝트-문서 연결테이블(REL_PROJECTS_DOCS) 에 등록인 경우
								if (this.mv_frmProjects != null && this.txtCads_RelSpName.Text.Contains("PROJECTS"))
								{
									this.mv_frmProjects.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtCads_ParentCid.Text), Convert.ToInt32(this.txtCads_ParentOid.Text), "");
								}
								//파트-문서 연결테이블(REL_ITEMS_DOCS) 에 등록인 경우
								if (this.mv_frmParts != null && this.txtCads_RelSpName.Text.Contains("PARTS"))
								{
									this.mv_frmParts.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtCads_ParentCid.Text), Convert.ToInt32(this.txtCads_ParentOid.Text), "");
								}
							}
						}
					}
					else
					{
						ComCls.cException.MessageBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_SELECTED_ADD, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Cancel 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnCads_Close_Click(object sender, EventArgs e)
			{
				try
				{
					this.Close();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>상세 화면을 볼 Cad 선택 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvCads_CellContentClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvCads.SelectedRows != null && e.ColumnIndex == this.dgvCads.SelectedRows[0].Cells["dgvCads_CadName"].ColumnIndex)
					{
						frmViewCads ofrmViewCads = new frmViewCads(this.mv_frmMain, this.dgvCads.SelectedRows[0].Cells["dgvCads_Cid"].Value.ToString(),
															this.dgvCads.SelectedRows[0].Cells["dgvCads_Oid"].Value.ToString(),
															this.dgvCads.SelectedRows[0].Cells["dgvCads_CadNumber"].Value.ToString() + "(" + this.dgvCads.SelectedRows[0].Cells["dgvCads_CadName"].Value.ToString() + ")");

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "View Cads" + " - " + this.dgvCads.SelectedRows[0].Cells["dgvCads_CadNumber"].Value.ToString() + "(" + this.dgvCads.SelectedRows[0].Cells["dgvCads_CadName"].Value.ToString() + ")",
													(object)ofrmViewCads, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [DOC - Search 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//DOC - Search 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Workflow - Search 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Workflow - Search 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Created By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtWorkflow_CreatedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtWorkflow_CreatedBy, this.txtWorkflow_CreatedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Modified By 입력 창 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void txtWorkflow_ModifiedBy_MouseClick(object sender, MouseEventArgs e)
			{
				try
				{
					frmSearchUserList ofrmSearchUserList = new frmSearchUserList(this.txtWorkflow_ModifiedBy, this.txtWorkflow_ModifiedByOid);
					ofrmSearchUserList.ShowDialog();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Search 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnWorkflow_Search_Click(object sender, EventArgs e)
			{
				try
				{

				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Undo 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnWorkflow_Undo_Click(object sender, EventArgs e)
			{
				try
				{
					this.txtWorkflow_EoNo.Text = null;
					this.txtWorkflow_Name.Text = null;
					this.txtWorkflow_Description.Text = null;
					this.txtWorkflow_FileName.Text = null;
					this.txtWorkflow_CreatedBy.Text = null;
					this.txtWorkflow_CreatedByOid.Text = null;
					this.txtWorkflow_ModifiedBy.Text = null;
					this.txtWorkflow_ModifiedByOid.Text = null;
					this.dateWorkflow_CreationDateFrom.Value = DateTime.Now.Date;
					this.dateWorkflow_CreationDateTo.Value = DateTime.Now.Date;
					this.dateWorkflow_ModificationDateFrom.Value = DateTime.Now.Date;
					this.dateWorkflow_ModificationDateTo.Value = DateTime.Now.Date;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시 </summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnWorkflow_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvWorkflow);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
	}// End class frmSearch
}// End namespace TimsXBX
